package com.boyue.service.impl;

import com.boyue.domain.RespBean;
import com.boyue.service.UserService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private RestTemplate restTemplate;

//    在restGetInfo方法上加上@HystrixCommand注解。
//    该注解对该方法创建了熔断器的功能，并指定了fallbackMethod熔断方法
//    当发现该方法出现异常，触发熔断，调用备选方法。
    @Override
    @HystrixCommand(fallbackMethod = "hiError")
    public RespBean restGetInfo() {
//        通过之前注入ioc容器的restTemplate来消费eureka-client服务的“/info”接口，
//        在这里我们直接用的程序名替代了具体的url地址，
//        在ribbon中它会根据服务名来选择具体的服务实例，
//        根据服务实例在请求的时候会用具体的url替换掉服务名
        return restTemplate.getForObject("http://EUREKA-CLIENT/eurekaClient/user/eurekaClientInfo",RespBean.class);
//        return restTemplate.postForObject("http://EUREKA-CLIENT/eurekaClient/user/eurekaClientInfo","POST",RespBean.class);
    }
//    当触发熔断时候，会快速执行此方法
    public RespBean hiError(){
        return RespBean.error("ribbon+rest调用服务发生错误，启用断路器");
    }
}
